Distributed Graph Databases
分散グラフデータベース
2012年末、バートはオンラインサービス部門のSavasに加わり、リアクティブな機能を備えた新しいグラフデータベースの構築に力を注ぎました。チームの目的は、世界のデータ(アーティストなどのBingのエンティティ、天気などの世界の情報の更新など)と、社内のさまざまなグループにあるこのデータのさまざまな消費者(Windows 8のアプリ、Officeのシナリオなど)との間のギャップを埋めることでした。グラフデータベースの目的は、実世界のエンティティとそれらの間の関係を保存し、照会することにありました。例えば、Xbox Musicでは、アーティスト、楽曲、評価などの情報を照会するためにグラフデータベースを使用しました。
In late 2012, Bart joined Savas in the Online Services Division to join forces in building a new graph database with reactive capabilities. The team’s charter was to bridge the gap between the world’s data (e.g. entities in Bing such as artists, updates to the world’s information such as weather, etc.) and various consumers of this data in different groups across the company (e.g. apps in Windows 8, Office scenarios, etc.). The goal of the graph database effort was to store and query real-world entities and relationships amongst them. For example, Xbox Music used the store to query information about artists, their songs, ratings, etc.
この新しいグラフデータベースは、Bingの組織内で使用されていた既存の分散型キー/バリューストアの上に構築されており、データにコロケーションして実行する、いわゆるコプロックのセットとして実装されていました。HTTPでアクセス可能なフロントエンドは、グラフへのノードやエッジの挿入や、グラフ内のデータに対するクエリの実行など、さまざまな操作をサポートしていました。後者については、LINQ to XMLのようなLINQベースのクエリ言語を構築し、ノードのコレクションや各ノードの入出力エッジのコレクションのトラバーサルをサポートすることにしました。ノードやエッジに関連付けられたデータは,JSON型システムに基づいたエンティティを用いて表現されました。これらのLINQクエリの実行には、ローカルのObjectStoreデータベースにアクセスして効率的にローカルで実行するために、クエリの対象となるノードのコレクションにコロケーションされたコプロックへの式木発送が使用されました。
This new graph database was built on top of an existing distributed key/value store that was used within the Bing organization, and was implemented as a set of so-called coprocs that run colocated to the data. An HTTP-accessible front-end supported various operations, including inserting nodes and edges into the graph, and performing queries over the data in the graph. To build the latter, we decided to build a LINQ-based query language akin to LINQ to XML to support traversal of collections of nodes and collections of incoming and outgoing edges for each node. Data associated with nodes and edges was represented using entities based on the JSON type system. The execution of these LINQ queries used expression tree shipping to coprocs colocated with the collections of nodes being queried for efficient local execution by accessing the local ObjectStore database.
Bartは、LINQ to Everything技術を統合してLINQフロントエンドとクエリプロセッサのバックエンドを構築する取り組みを開始し、IQbservable<T>と式木の出荷に関する作業を技術に統合することで、リアクティブグラフのアイデアを復活させました。これらのアイデアがReaqtorのビジョンの草の根となったことを踏まえ、これらについてもう少し詳しく説明します。
Bart started the effort on integrating the LINQ to Everything technology to build a LINQ front-end and query processor back-end, and to resurrect the idea of a reactive graph by integrating the work on IQbservable<T> and expression tree shipping into the technology. Given that these ideas provided the grass roots for the Reaqtor vision, we’ll get into some more detail on these.